package chapter16;

//*******************************************************************
//  BinaryTree.java       Java Foundations
//
//  Defines the interface to a binary tree collection.
//*******************************************************************
import java.util.ArrayList;
import java.util.Iterator;

public interface BinaryTree<T> extends Iterable<T>
{
    //  Returns the element stored in the root of the tree.
    public T getRootElement() throws Exception;

    //  Returns the left subtree of the root.
    public BinaryTree<T> getLeft() throws Exception;

    //  Returns the right subtree of the root.
    public BinaryTree<T> getRight() throws Exception;

    //  Returns true if the binary tree contains an element that
    //  matches the specified element and false otherwise.
    public boolean contains (T target) throws Exception;

    //  Returns a reference to the element in the tree matching
    //  the specified target.
    public T find (T target) throws Exception;

    //  Returns true if the binary tree contains no elements, and
    //  false otherwise.
    public boolean isEmpty();

    //  Returns the number of elements in this binary tree.
    public int size();

    //  Returns the string representation of the binary tree.
    public String toString();

    //  Returns a preorder traversal on the binary tree.
    public  ArrayList<T> preorder();

    //  Returns an inorder traversal on the binary tree.
    public ArrayList<T> inorder();

    //  Returns a postorder traversal on the binary tree.
    public  ArrayList<T> postorder();

    //  Performs a level-order traversal on the binary tree.
    public  ArrayList<T> levelorder() throws Exception;
}

